﻿<%@ page contentType="text/html;charset=utf-8"%><%@page import="java.io.*,
	java.io.*,
	java.util.*,
	java.net.*,
	javax.xml.parsers.*,
	org.apache.xml.serialize.*,
	javax.xml.transform.*,
	javax.xml.transform.dom.*,
	javax.xml.transform.stream.*,
	org.w3c.dom.*"%><%!

	// (메모리상의)XML 문서를 파일로 쓰기.
	// Input: XML 문서의 Root Element
	//        파일이 생성될 경로
	// Output: 없음.
	void writeXMLFile(Element rootElement, String filePath) throws Exception {
		XMLSerializer serializer = new XMLSerializer();
		serializer.setOutputByteStream(new FileOutputStream ( filePath ));
		serializer.serialize(rootElement);
	}

	// REST 방식의 OpenAPI 호출.
	// Input: keyword
	// Output: XML Stream
	InputStream callOpenAPI(String keyword) throws Exception {
		InputStream ret = null;

		// daum blog search
		String OPEN_API_URL = "http://apis.daum.net/search/blog";
		String API_KEY = "746ff79dd65f5fa16d06ba9881245a7479625b22";
		
		String serviceURL = OPEN_API_URL + "?apikey=" + API_KEY + "&output=XML&q=" + URLEncoder.encode(keyword, "UTF-8");

		// 디버깅용: 호출 URL 콘솔창에 출력.
		System.out.println("serviceURL-[" + serviceURL + "]");
		
		URL requestUrl = new URL(serviceURL);
		ret = requestUrl.openConnection().getInputStream();

		return ret;
	}

	// XML 문서 파싱.
	// Input: XML Stream
	// Output: XML 문서의 Root Element.
	Element parseDocument(InputStream is) throws Exception {
		Element ret = null;

		// 파서(Parser) 생성.
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setIgnoringElementContentWhitespace(true);
		DocumentBuilder builder = factory.newDocumentBuilder();

		// XML 문서 파싱.
		Document document = builder.parse(is);

		ret = document.getDocumentElement();

		// 디버깅용.
		// XML 파일 생성하기.
		writeXMLFile(ret, "c:/search.xml");

		return ret;
	}
%><%
	request.setCharacterEncoding("UTF-8");
	response.setContentType("text/html;charset=UTF-8");

	String keyword = request.getParameter("keyword");

	if (keyword != null) {
%>
	<table border=1>
		<tr><td>title</td><td>link</td><td>desc</td></tr>
<%
		InputStream is = callOpenAPI(keyword);
		Element rootElement = parseDocument(is);

		//<item>
		//	<title>문서 제목</title> 
		//	<description>문서 설명</description> 
		//	<link>http://blog.daum.net/whtjddus/9789766</link> 
		//	<author>저자 이름</author> 
		//	<comment>http://blog.daum.net/whtjddus</comment> 
		//	<pubDate>Mon, 18 Sep 2006 10:59:03 +0900</pubDate> 
		//</item>
		NodeList result = rootElement.getElementsByTagName("item");
		int count = result.getLength();
		for(int i = 0; i < count; i++) {
			Node item = result.item(i);
			NodeList itemChildNodeList = item.getChildNodes();
			Node title = itemChildNodeList.item(0);
			Node titleValue = title.getChildNodes().item(0);
			out.println("<tr><td><b>" + titleValue.getNodeValue() + "</b></td>");

			Node link = item.getChildNodes().item(2).getChildNodes().item(0);
			Node desc = item.getChildNodes().item(1).getChildNodes().item(0);
			String descStr = null;
			if (desc != null) {
				descStr = desc.getNodeValue();
			}
			else {
				descStr = "설명이 없습니다";
			}
%>
			<td><a href="<%=link.getNodeValue()%>" target=_blank>바로가기</a></td>
			<td><%=descStr%></td>
		</tr>
<%
		}
%>
	</table>
<%
	}
	else {
	}
%>
